package com.hyper_yang.javase.reflection_annotation.reflect;

import org.junit.jupiter.api.Test;

import java.lang.reflect.Modifier;

public class ClassInfoTest {
    @Test
    public void test1() {
        // todo: 反射是站在类对象的角度，可以获取类的所有信息
        Class<Dog> dogClass = Dog.class;

        // 获取包
        Package aPackage = dogClass.getPackage();
        System.out.println(aPackage.getName());

        // 获取类的直接父类对象
        Class<? super Dog> superclass = dogClass.getSuperclass();
//        Class<? super Dog> superclass2 = superclass.getSuperclass();
        System.out.println(superclass);
//        System.out.println(superclass2); // class java.lang.Object

        // 获取类的直接接口对象
        for (Class<?> anInterface : dogClass.getInterfaces()) {
            System.out.println(anInterface);
        }
    }

    @Test
    public void test2() {
        // todo: 获取类的修饰符
        Class<Dog> dogClass = Dog.class;
        int modifiers = dogClass.getModifiers();
        System.out.println(Modifier.toString(modifiers));

        Class<Animal> animalClass = Animal.class;
        int modifiers1 = animalClass.getModifiers();
        System.out.println(Modifier.toString(modifiers1));
    }
}
